package hadoop.ch09.ll17124080231;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class ZooKeeperTest{
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        listener();
        operate();

        Thread.sleep(20 * 1000);
    }

    public static void listener() throws IOException, KeeperException, InterruptedException{
        // 创建一个与服务器的连接
        ZooKeeper zk = new ZooKeeper(ZookeeperConstant.URL, 1000 * 1, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                System.out.println("开始执行2" + event.getType() + "任务！" + event);
            }
        });

        zk.exists("/ll17124080231/Path3", new Watcher(){

            public void process(WatchedEvent event) {
                System.out.println("开始执行3" + event.getType() + "任务！" + event);

            }

        });
        zk.exists("/ll17124080231", true);

    }



    private static void operate() throws IOException, KeeperException, InterruptedException {
        ZooKeeper zk = new ZooKeeper(ZookeeperConstant.URL, 1000 * 1, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                System.out.println("开始执行" + event.getType() + "任务！");
            }
        });
        if(zk.exists("/ll17124080231", true) != null){
            zk.delete("/ll17124080231", -1);
        }
        // 创建一个目录节点
        zk.create("/ll17124080231", "Hello Zookeeper!17124080231".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        // 创建一个子目录节点
        zk.create("/ll17124080231/Path1", "231".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(new String(zk.getData("/ll17124080231", true, null)));

        // 取出子目录节点列表
        System.out.println(zk.getChildren("/ll17124080231", true));

        // 修改子目录节点数据
        zk.setData("/ll17124080231/Path1", "231-hello,231".getBytes(), -1);
        System.out.println("目录节点状态：[" + zk.exists("/ll17124080231", true) + "]");

        // 创建另外一个子目录节点
        zk.create("/ll17124080231/Path2", "liulong".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(new String(zk.getData("/ll17124080231/Path2", true, null)));

        // 创建另外一个子目录节点
        zk.create("/ll17124080231/Path3", "17124080231".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);

        System.out.println(new String(zk.getData("/ll17124080231/Path3", true, null)));

        // 删除子目录节点
        //zk.delete("/stu/stuChildPathTwo", -1);
        //zk.delete("/stu/stuChildPathOne", -1);

        // 关闭连接
        zk.close();
    }

}
